package io.shuttle.mbe.api.types

import io.shuttle.mbe.api.ColorArray

sealed class StringOrStringArr {
    data class Str(val value: String) : StringOrStringArr()
    data class StrArr(val value: List<Str>) : StringOrStringArr()
}

sealed class StringOrStringOrAnyArr {
    data class Str(val value: String) : StringOrStringArr()
    data class StrArr(val value: List<String>) : StringOrStringArr()
    data class Object(val value: Any) : StringOrStringArr()
}

sealed class StringOrNumber {
    data class Str(val value: String) : StringOrNumber()
    data class Num(val value: Number) : StringOrNumber()
}

sealed class StrNumBoolOrNumArr {
    data class Str(val value: String) : StrNumBoolOrNumArr()
    data class Num(val value: Number) : StrNumBoolOrNumArr()
    data class Bool(val value: Boolean) : StrNumBoolOrNumArr()
    data class NumArr(val value: List<Number>) : StrNumBoolOrNumArr()
}

sealed class NumOrNumArr {
    data class Num(val value: Number) : NumOrNumArr()
    data class NumArr(val values: List<Number>) : NumOrNumArr()
}

sealed class TypedOrTypedArr<out T> {
    data class Typed<out T>(val value: T) : TypedOrTypedArr<T>()
    data class TypedArr<out T>(val value: List<T>) : TypedOrTypedArr<T>()
}

sealed class StringOrColorArray {
    data class Str(
        var value: String
    ) : StringOrColorArray()

    data class ColorArr(
        var value: ColorArray
    ) : StringOrColorArray()
}

sealed class StringOrObject {
    data class Str(
        var value: String
    ) : StringOrObject()

    data class Obj(
        var value: Any
    ) : StringOrObject()
}